import { HttpException, Injectable } from '@nestjs/common';
import { CreateSystemDto } from './dto/create-system.dto';
import { UpdateSystemDto } from './dto/update-system.dto';
import { Repository } from 'typeorm';
import { InjectRepository } from '@nestjs/typeorm';
import { System } from './entities/system.entity';

@Injectable()
export class SystemService {
  private oneSystemId: string;
  constructor(
    @InjectRepository(System)
    private readonly systemRepository: Repository<System>,
  ) {}

  async create(createSystemDto: CreateSystemDto) {
    // 获取系统配置列表
    const list = await this.systemRepository.find();
    // 获取第一个系统配置
    if (list.length > 1) {
      // 目前仅支持一个系统配置
      throw new HttpException('系统配置已存在', 400);
    }
    const data = this.systemRepository.create(createSystemDto);
    const res = await this.systemRepository.save(data);
    this.oneSystemId = res?.id;
    return res;
  }

  findAll() {
    return this.systemRepository.find();
  }

  findOne(id: string = this.oneSystemId) {
    return this.systemRepository.findOneByOrFail({ id });
  }

  async update(
    id: string = this.oneSystemId,
    updateSystemDto: UpdateSystemDto,
  ) {
    const data = await this.findOne(id);
    if (!data) throw new HttpException('数据不存在', 400);
    const updateData = this.systemRepository.merge(data, updateSystemDto);
    return await this.systemRepository.save(updateData);
  }

  async remove(id: string) {
    const data = await this.findOne(id);
    if (!data) throw new HttpException('数据不存在', 400);
    return await this.systemRepository.delete({ id });
  }

  // 获取系统配置数据
  async getSystemData() {
    // 获取系统配置列表
    const list = await this.systemRepository.find();
    if (list.length === 0) {
      // 系统配置为空，初始化系统配置
      const data = this.create({
        name: '系统名称',
        pageView: 0,
      });
      console.log('初始化系统配置', data);
      return data;
    } else {
      // 获取第一个系统配置
      this.oneSystemId = list[0]?.id;
      return list[0];
    }
  }

  // 系统浏览量+1
  async incrementPageView() {
    // 获取系统配置数据
    const systemData = await this.getSystemData();
    if (!systemData) throw new HttpException('系统配置不存在', 400);

    // 增加浏览量
    systemData.pageView = systemData.pageView < 0 ? 1 : systemData.pageView + 1;

    // 保存更新后的系统配置数据
    return await this.systemRepository.save(systemData);
  }
}
